home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 15
/
Aminet 15 - Nov 1996.iso
/
Aminet
/
dev
/
gcc
/
ixemsdk.lha
/
man
/
cat1
/
ixtrace.0
< prev
Wrap
Text File
|
1996-09-01
|
6KB
|
199 lines
IXTRACE(1) IXTRACE(1)
NNAAMMEE
ixtrace - a tracer for ixemul.library
SSYYNNOOPPSSIISS
iixxttrraaccee [ --aa ] [ --ii ] [ --mm ] [ --ll ] [ --vv ] [ --zz ] [ --cc
syscall name ] [ --nn N ] [ --oo logfile ] [ --pp pid ] [ --ss
syscall-number ]
DDEESSCCRRIIPPTTIIOONN
_I_x_t_r_a_c_e is a utility that reports every call that is made
to the _i_x_e_m_u_l_._l_i_b_r_a_r_y. Since it scans every call made
through the library base, it catches even more calls than
for example SnoopDOS.
Obviously, tracing support slows down _a_l_l clients of the
library (as each call is now routed through a trace func-
tion). For this reason there are two library versions.
_I_x_e_m_u_l_._l_i_b_r_a_r_y itself doesn't contain tracing support.
Using the tracer with this library gives a "Function not
implemented" error. To use the _i_x_t_r_a_c_e utility, you should
use the _i_x_e_m_u_l_._t_r_a_c_e library instead of _i_x_e_m_u_l_._l_i_b_r_a_r_y.
See UUSSAAGGEE for more detailed instructions.
The option most often used is --mm, as the library uses
_s_i_g_s_e_t_m_a_s_k_(_) a lot internally, and mentioning this call
again and again would just clutter the screen.
OOPPTTIIOONNSS
--aa Print all calls, even those considered `not inter-
esting': internal stdio-calls and 32 bit arithmetic
emulation for 68000, for example.
--ii Normally, the tracer shows a function call when
that function returns, to be able to display the
return value (and _e_r_r_n_o in parenthesis). When --ii is
specified, it always displays the function on
entry, instead of on exit. See BBUUGGSS for current
problems if you invoke _i_x_t_r_a_c_e without the --ii
option.
--mm Skip _s_i_g_s_e_t_m_a_s_k_(_) calls. This function is used
extensively inside the library, and will in most
cases just clutter the tracer output.
--ll List _a_l_l system calls to stdout. No more need to
look up a call you want to trace in the
include/sys/syscall.def file.
--vv Print the current _v_e_r_s_i_o_n number.
--zz Allows the input of _s_y_s_c_a_l_l _n_a_m_e_s that the user
wants to trace.
--cc Only print calls to a specific system call, by
1
IXTRACE(1) IXTRACE(1)
name. Differs from _-_s , which expects a syscall
number.
--nn Skip the first _N traces.
--oo Specify a logfile. If --oo is omitted, output goes to
_s_t_d_o_u_t.
--pp Only print output from a specific process. You have
to provide the decimal address of the process.
Default is to scan all current _i_x_e_m_u_l_._l_i_b_r_a_r_y
clients.
--ss Only print calls to a specific system call. You
have to specify the system call number as found in
<<ssyyss//ssyyssccaallllss..ddeeff>>.
UUSSAAGGEE
Before you can use _i_x_t_r_a_c_e, you will first have to flush
the old _i_x_e_m_u_l_._l_i_b_r_a_r_y out of the system. The Workbench
option FFlluusshhLLiibbss can do that for you, AAvvaaiill FFLLUUSSHH achieves
the same from a shell. This assumes no currently running
process is using the library.
Next make sure the system loads _i_x_e_m_u_l_._t_r_a_c_e instead of
_i_x_e_m_u_l_._l_i_b_r_a_r_y next time it starts a program that uses
_i_x_e_m_u_l_._l_i_b_r_a_r_y
You can do that by replacing _i_x_e_m_u_l_._l_i_b_r_a_r_y with
_i_x_e_m_u_l_._t_r_a_c_e. You can also use LLooaaddLLiibb iixxeemmuull..ttrraaccee. But
LLooaaddLLiibb is not an official CLI command.
Now Start the tracer (probably in its own window). You
should now see a log of all functions called from your
program(s), and some functions called as a consequence of
your functions from inside the library. A typical output
line is:
$$77558888779900:: <<ssttrrccmmpp((""ffoooo"",, --nn ))==5577 ((00))
$$77558888779900
This is the process address.
<< Type of log, << means on exit, >> means on entry.
ssttrrccmmpp((""ffoooo"",, --nn ))
The function with the parameters.
==5577 The result of the function.
((00)) The value of _e_r_r_n_o.
2
IXTRACE(1) IXTRACE(1)
BBUUGGSS
There seems to be some race condition, that can result in
deadlock when running without the --ii flag.
Currently, if trace-on-exit is enabled, the function is
called with 16 arguments, no matter how many arguments you
passed to it. This should be enough for 99% of all appli-
cations, but you may have more than 16 arguments to a
_p_r_i_n_t_f_(_) somewhere.
Functions returning more than a 4 byte result do _n_o_t work
unless you specify the --ii option!
HHIISSTTOORRYY
Adapted by David Zaroski from the original RREEAADDMMEE written
by Markus Wild.
3